/*
 * sysmo 服务器被监控客户端（节点）信息
 * Copyright (C) 2009  YuLicheng
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.sysmo.server.node;

import java.util.List;
import org.sysmo.server.node.item.Item;
import org.sysmo.communication.CommunicationInterface;
import org.sysmo.db.DatabaseInterface;
import org.sysmo.server.node.item.ItemExistsException;

/**
 *
 * 被监控的客户端（节点）信息模块。每个类实例对应于一个被监控的节点。
 * 此类代表的节点是已经加入监控列表且已与服务器建立连接的节点。
 *
 * @author YuLicheng
 * @see Node
 */
public class ConnectedNode extends AddedNode {
    
    private CommunicationInterface client;

    /**
     * 创建已连接的监控列表内的节点实例。
     *
     * @param stateListener 节点状态改变回调接口。
     * @param dbInterface 数据库访问接口。
     * @param client 客户端通讯连接。
     * @param nodeID 节点的客户端ID。
     * @throws NodeNotExistsException 若客户端ID不存在则抛出此异常。
     */
    public ConnectedNode(NodeStateChangeListener stateListener,
            DatabaseInterface dbInterface, CommunicationInterface client, int nodeID)
            throws NodeNotExistsException {
        super(stateListener, dbInterface, nodeID);
        this.client = client;
    }

    
    /**
     * 建立和此客户端节点的通信通道。此方法将会创建一个新线程来等待客户端发送的
     * 消息，老的线程将立即返回。新线程会一直运行，直到{@link #closeConnection()}
     * 方法被调用。
     */
    public void connect() {
        
    }

    /**
     * 断开与客户端的连接。此方法会发送断开连接消息给客户端，然后通知在
     * {@link #connect}方法中创建的新线程结束监听客户端消息并断开连接。
     * 此方法返回后即可安全地销毁此客户端对象。
     */
    public void closeConnection() {

    }

    /**
     * 增加一个新监控项并返回。新增加的监控项中没有任何图表。
     *
     * @param name 新监控项名称。
     * @return 新增加的监控项。
     * @throws ItemExistsException 若存在同名图表则抛出此异常。
     */
    public Item addItem(String name) throws ItemExistsException {
        return null;
    }

    @Override
    public boolean isConnected() {
        return true;
    }

    @Override
    public Item getItem(int id) {
        return null;
    }

    @Override
    public List<Item> getAllItems() {
        return null;
    }
}
